AppendChunk and GetChunk Methods Example

This example uses the AppendChunk and GetChunk methods to fill an OLE object field with data from another record, 32K at a time. In a real application, one might use a procedure like this to copy an employee record (including the employee's photo) from one table to another. In this example, the record is simply being copied back to same table. Note that all the chunk manipulation takes place within a single AddNew-Update sequence.

Sub AppendChunkX()

   Dim dbsNorthwind As Database
   Dim rstEmployees As Recordset
   Dim rstEmployees2 As Recordset

   Set dbsNorthwind = OpenDatabase("Northwind.mdb")

   ' Open two recordsets from the Employees table.
   Set rstEmployees = _
      dbsNorthwind.OpenRecordset("Employees", _
      dbOpenDynaset)
   Set rstEmployees2 = rstEmployees.Clone

   ' Add a new record to the first Recordset and copy the 
   ' data from a record in the second Recordset.
   With rstEmployees
      .AddNew
      !FirstName = rstEmployees2!FirstName
      !LastName = rstEmployees2!LastName
      CopyLargeField rstEmployees2!Photo, !Photo
      .Update

      ' Delete new record because this is a demonstration.
      .Bookmark = .LastModified
      .Delete
      .Close
   End With

   rstEmployees2.Close
   dbsNorthwind.Close

End Sub

Function CopyLargeField(fldSource As Field, _
   fldDestination As Field)

   ' Set size of chunk in bytes.
   Const conChunkSize = 32768

   Dim lngOffset As Long
   Dim lngTotalSize As Long
   Dim strChunk As String

   ' Copy the photo from one Recordset to the other in 32K 
   ' chunks until the entire field is copied.
   lngTotalSize = fldSource.FieldSize
   Do While lngOffset < lngTotalSize
      strChunk = fldSource.GetChunk(lngOffset, conChunkSize)
      fldDestination.AppendChunk strChunk
      lngOffset = lngOffset + conChunkSize
   Loop

End Function